package io.easyspring.common.generator.config;

import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * 生成器的生成策略配置
 *
 * @author summer
 * @version V1.0.0-RELEASE
 * DateTime 2019-05-11 18:46
 */
public class GeneratorStrategyConfig {

    /**
     * 策略配置
     *
     * @param tablePrefixArr 表前缀
     * @param includeTableArr 要生成的表的集合
     * @return com.baomidou.mybatisplus.generator.config.StrategyConfig
     * Author summer
     * Version V1.0.0-RELEASE
     * DateTime 2019-05-11 18:47
     */
    public static StrategyConfig strategyConfig(String[] tablePrefixArr, String[] includeTableArr){
        // 创建策略配置对象
        StrategyConfig strategyConfig = new StrategyConfig();
        // 是否大写命名 ORACLE 注意
        // strategyConfig.setCapitalMode(true);
        // 是否跳过视图
        // strategyConfig.setSkipView(false);
        // 数据库表映射到实体的命名策略(驼峰)
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        // 数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
        // strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        // 表前缀
        strategyConfig.setTablePrefix(tablePrefixArr);
        // 字段前缀
        // strategyConfig.setFieldPrefix("user", "role");

        // 自定义实体，公共字段
        strategyConfig.setSuperEntityColumns(new String[] { "id", "create_time", "update_time", "deleted" });

        // 自定义继承的 Entity 类全称，带包名
        strategyConfig.setSuperEntityClass("io.easyspring.framework.base.model.BaseModel");
        // 自定义继承的 Mapper 类全称，带包名
        strategyConfig.setSuperMapperClass("io.easyspring.framework.base.mapper.BaseMapper");
        // 自定义继承的 Service 类全称，带包名
        strategyConfig.setSuperServiceClass("io.easyspring.framework.base.service.BaseService");
        // 自定义继承的 ServiceImpl 类全称，带包名
        strategyConfig.setSuperServiceImplClass("io.easyspring.framework.base.service.impl.BaseServiceImpl");
        // 自定义继承的Controller类全称，带包名
        // strategyConfig.setSuperServiceImplClass("io.easyspring.framework.base.web.BaseController");

        // 需要包含的表名，允许正则表达式（与exclude二选一配置）
        strategyConfig.setInclude(includeTableArr);
        // 需要排除的表名，允许正则表达式
        // strategyConfig.setExclude("sys_user", "sys_role");

        // 【实体】是否生成字段常量（默认 false）
        strategyConfig.setEntityColumnConstant(false);
        // 【实体】是否为构建者模型（默认 false）
        // strategyConfig.setEntityBuilderModel(false);
        // 【实体】是否为lombok模型（默认 false）
        strategyConfig.setEntityLombokModel(true);
        // Boolean类型字段是否移除is前缀（默认 false）
        // strategyConfig.setEntityBooleanColumnRemoveIsPrefix(false);
        // 生成 @RestController 控制器
        strategyConfig.setRestControllerStyle(true);
        // 驼峰转连字符
        // strategyConfig.setControllerMappingHyphenStyle(false);
        // 是否生成实体时，生成字段注解
        strategyConfig.entityTableFieldAnnotationEnable(false);
        // 乐观锁属性名称
        // strategyConfig.setVersionFieldName("user_id");
        // 逻辑删除属性名称
        // strategyConfig.setLogicDeleteFieldName("deleted");
        // 表填充字段
        // strategyConfig.setTableFillList();

        return strategyConfig;
    }
}
